package br.com.projeto.model.entities;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name = "atividade")
public class Atividade implements Serializable {

	private static final long serialVersionUID = -5095073951928147667L;
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Basic(optional = false)
	@Column(name = "id")
	private Integer id;
	@Basic(optional = false)
	@Column(name = "titulo")
	private String titulo;
	@Column(name = "descricao")
	private String descricao;
	@Basic(optional = false)
	@Column(name = "inicio")
	@Temporal(TemporalType.TIMESTAMP)
	private Date inicio;
	@Basic(optional = false)
	@Column(name = "termino")
	@Temporal(TemporalType.TIMESTAMP)
	private Date termino;
	@Basic(optional = false)
	@Column(name = "status")
	private boolean status;
	@Basic(optional = true)
	@Column(name = "comentario")
	private String comentario;
	@ManyToMany(mappedBy = "atividades", fetch = FetchType.LAZY)
	private List<Usuario> usuarios;

	@JoinColumn(name = "projeto_id", referencedColumnName = "id")
	@ManyToOne(fetch = FetchType.LAZY)
	private Projeto projeto;

	@JoinColumn(name = "criado_por", referencedColumnName = "id")
	@ManyToOne(optional = false, fetch = FetchType.LAZY)
	private Usuario autor;

	@Column(name="esforco_previsto")
	private Double esforcoPrevisto;
	@Column(name="esforco_real")
	private Double esforcoReal;
	
	
	
	public Atividade() {
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getTitulo() {
		return titulo;
	}

	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public Date getInicio() {
		return inicio;
	}

	public void setInicio(Date inicio) {
		this.inicio = inicio;
	}

	public Date getTermino() {
		return termino;
	}

	public void setTermino(Date termino) {
		this.termino = termino;
	}

	public boolean isStatus() {
		return status;
	}

	public void setStatus(boolean status) {
		this.status = status;
	}

	public String getComentario() {
		return comentario;
	}

	public void setComentario(String comentario) {
		this.comentario = comentario;
	}

	public List<Usuario> getUsuarios() {
		return usuarios;
	}

	public void setUsuarios(List<Usuario> usuarios) {
		this.usuarios = usuarios;
	}

	public Projeto getProjeto() {
		return projeto;
	}

	public void setProjeto(Projeto projeto) {
		this.projeto = projeto;
	}

	public Usuario getAutor() {
		return autor;
	}

	public void setAutor(Usuario autor) {
		this.autor = autor;
	}
	
	public Double getEsforcoPrevisto() {
		return esforcoPrevisto;
	}

	public void setEsforcoPrevisto(Double esforcoPrevisto) {
		this.esforcoPrevisto = esforcoPrevisto;
	}

	public Double getEsforcoReal() {
		return esforcoReal;
	}

	public void setEsforcoReal(Double esforcoReal) {
		this.esforcoReal = esforcoReal;
	}

	public void addUsuario(Usuario usuario) {
		if (this.usuarios == null)
			this.usuarios = new ArrayList<Usuario>();

		this.usuarios.add(usuario);
	}

}
